/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ejbs;

import dtos.VendaDTO;
import entities.FuncBalcao;
import entities.Produto;
import entities.Venda;
import excecoes.EntidadeNaoExistenteException;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 *
 * @author Diogo
 */
@Stateless
public class VendaBean {

    @PersistenceContext(name = "Gestao_FarmciasPU")
    private EntityManager em;

    @EJB
    private FuncionarioBean funcBean;

    public VendaDTO criarVenda(Date data, String funcionario) throws EntidadeNaoExistenteException {
        try {
            FuncBalcao func = em.find(FuncBalcao.class, funcionario);
            if (func == null) {
                throw new EntidadeNaoExistenteException("Esse funcionario nao existe");
            }
            Venda venda = new Venda(func, data);
            em.persist(venda);
            VendaDTO vendaDTO = new VendaDTO(venda.getId(), venda.getFuncBalcao().getUsername(), venda.getData(), venda.isFechada());
            return vendaDTO;
        } catch (EntidadeNaoExistenteException e) {
            throw e;
        } catch (Exception e) {
            throw new EJBException(e.getMessage());
        }
    }

    public VendaDTO copiarVendaParaDTO(Venda venda) {
        return new VendaDTO(venda.getId(), venda.getFuncBalcao().getUsername(), venda.getDataVenda(), venda.isFechada());
    }

    public VendaDTO getVenda(int id) {
        return copiarVendaParaDTO(em.find(Venda.class, id));
    }

    public List<VendaDTO> getAllVendas() {
        try {
            List<Venda> vendas = (List<Venda>) em.createNamedQuery("findAllVendas").getResultList();
            return copiarVendasParaDTO(vendas);
        } catch (Exception e) {
            throw new EJBException(e.getMessage());
        }
    }

    public List<VendaDTO> copiarVendasParaDTO(List<Venda> vendas) {
        List<VendaDTO> dtos = new LinkedList<>();

        for (Venda v : vendas) {
            dtos.add(new VendaDTO(v.getId(), v.getFuncBalcao().getUsername(), v.getData(), v.isFechada()));
        }
        return dtos;
    }

}
